home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Merciful 1
/
Merciful - Disc 1.iso
/
software
/
d
/
devpak
/
devpakv3.01kickstartv1.3b.dms
/
devpakv3.01kickstartv1.3b.adf
/
arp
/
prodocs
/
GADS
< prev
next >
Wrap
Text File
|
1991-11-20
|
7KB
|
199 lines
GADS(33.4) ARP Programmers Manual GADS(33.4)
NAME
GADS -- Do standard AmigaDOS command line parsing.
SYNOPSIS
Count = GADS( "line", len, "help" args, "tplate");
d0 a0 d0 a1 a2 a3
FUNCTION
This function performs the standard AmigaDOS style command
line parsing, using the standard AmigaDOS style templates.
It also handles interactive command lines for you.
This program will also perform all the normal AmigaDOS
processing on the command line before the parse. In
particular, this means handling any escape characters that
are found in the line. The method used by AmigaDOS (and in
this function) is to escape quoted commands, but not
unquoted commands. Quotes will be stripped unless escaped.
Note that ArpLib recognizes a more extensive escape
vocabulary than AmigDOS (see EscapeString). Note also that
one exception to the above occurs when a function is passed
a null 'tplate' pointer.
INPUTS
"cmdline" -- pointer to the command line, just as you get it
from DOS.
cmdlen -- length of command line, just as handed to you by
DOS.
argarray -- Pointer to the start of an array of longwords
which will receive the results of the argument
parse. There must be as many longwords in this array
as there are arguments in the template. There must
ALWAYS be at least one element in this array.
"tplate" -- Pointer to an AmigaDOS style template. This
function assumes that the template is 'well formed',
i.e., no spaces, tabs, etc., and that it null
terminated. Do NOT end your template with ':'. It
may contain mixed cases.
"xtra help" -- optional extra help string, which may be as
long as you like, and include any type of characters
you desire. The user will see this string if they
type a question mark after they have already entered
interactive processing. This should be NULL if you
do not have any xtra help to supply.
RESULT
COUNT -- The number of arguments found, or -1 if there is an
Page 1 (printed 2/22/88)
GADS(33.4) ARP Programmers Manual GADS(33.4)
error in the comand line. This function is fairly
demanding about command line syntax.
ArgArray -- If COUNT is nonzero, ArgArray contains the
results of the parse. Each argument (if present)
will be placed in the position of the argument array
reserved for it in the template. For example, in
the template "DIR,TO", DIR will always appear in the
first argument position, and TO will always appear
in the second, regardless of how the user supplied
the string.
If COUNT is zero, then the ArgArray contains the values it
was initialized with. This allows you to submit
preset argument values.
If COUNT is less than zero, an argument error occured, and
the first entry in the ArgArray is a pointer to an
error string which describes the error. Typically,
a program will display this message and then exit.
ADDITIONAL CONSIDERATIONS
This function will return an error if the user omitted a
required argument (indicated by a /A in the template) only
if the command line is non-null.
The initial command line pointer may not be valid after a
call to this function, since GADS() uses the resource
tracking functions to allocate additional memory for
interactive command line processing as needed.
If template is a NULL pointer, special command line
processing takes effect. This option is used by programs
such as Echo or Set which do more of their own command line
processing, but still want the Escape and string cleaning
functions of GADS() to be in effect.
Additions for V33.4
Two additions have been made to GADS() for this release of
the library. A new template type, sometimes referred to as
multiargs, has been added to the original set of template
types of AmigaDOS. This allows an essentially infinite
number of arguments to be supplied, and dispenses with the
ugly and limited ",,,,,,,,,,," construct. Note that this is
still supported, if you wish to use it.
Multiargs are indicated by using "/..." as the type
indicator. For example, the template "Files/...,OPT/K",
allows any number of files to be entered. The GADS() return
value will be the total number of arguments entered, as
always. The value of the multiarged item will be of type
*(*char[]), i.e., a pointer to an array of character
Page 2 (printed 2/22/88)
GADS(33.4) ARP Programmers Manual GADS(33.4)
pointers. The arguments will be placed in this array in the
order in which they are found, and the last item is
guaranteed to be NULL. Note that the memory for this array
is allocated by GADS() using the tracking functions, you do
not have to obtain, and should not free, this memory.
One important aspect of using the multiarg template type in
designing templates is that you should allow only keywords
or switches to follow the multiarged item. For example:
"Files/...,TO/K,SILENT/S"
would work well, but the following template has a problem:
"Files/...,TO"
If a user specifies the TO argument without the keyword TO,
the parsing routine has no way to tell where the Files/...
args end, and the TO argument begins, therefore, it will
parse the TO argument as a member of the Files/... type.
This 'swallowing' of optional arguments can cause
difficulties, and should be avoided by using only one
optional argument, the multiarged one, per template. If you
must use additional optional arguments, then these should
preceed the multiarg argument.
Ordinarily, GADS() (like AmigaDOS) regards the equal sign
(=) as a statement separator. You can now override that if
you wish by using the character sequence "-=" to begin a
template. This will not appear to the user if he types a
'?', but it will cause the equal signs to be treated as
literal characters, rather than delimiters. This is useful
in programs like Set. The lack of this feature in the
original AmigaDOS arg parser is probably why Assign has such
an unnatural syntax.
BUGS
No error checking is performed on the actual syntax of the
template. This routine assumes you did it right.
Could alter the original cmdline area, and will, except in
the case of interactive input.
SEE ALSO
EscapeString(), ReadLine(), ArpAlloc()
AUTHOR
SDB
Page 3 (printed 2/22/88)